﻿@model planerka.DataAccess.ViewModels.tasksViewModel
@using planerka.DataAccess.DataService;
@using planerka.Common.Enums;
@using planerka.Common

@section HeadContent
{
    <meta name="description" content="Планерка - простая система управления задачами (service desk). Позволяет организовать работу над проектом с привлечением методов проектирования (в том числе и для решения изобретательских задач). В соответствующем разделе вы найдете описание процесса проектирования с использованием методов проектирования и креативных решений. " />
    <meta name="keywords" content="управление задачами, список задач, Система управления задачами, менеджер задач, Планерка, обучение методам проектирования, система обслуживания клиентов, экспертная система по управлению проектами, service desk бесплатно, servicedesk" />

    <script src="@Url.Content("~/Scripts/ui/jquery.ui.core.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/ui/jquery.ui.widget.js")" type="text/javascript"></script>

    <link rel="stylesheet" href="@Url.Content("~/Content/jquery.ui.theme-overcast.css")" type="text/css" />

    <link rel="stylesheet" href="@Url.Content("~/Content/jquery.ui.datepicker.css")"  type="text/css" />
    <link rel="stylesheet" href="@Url.Content("~/Content/jquery.ui.core.css")"  type="text/css" />
    <script type="text/javascript" src="@Url.Content("~/Scripts/ui/jquery.ui.datepicker.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/ui/jquery.ui.datepicker-ru.js")"></script>

    <script type="text/javascript">

        // обновить скрытое поле со списком заказов
        function updateCheckList() {
            var tasks = "";
            var delimiter = "";
            $(".checkbox").each(function (n) {
                //alert($(this).attr('checked'));
                if ($(this).is(':checked')) {
                    tasks = tasks + delimiter + $(this).attr("name");
                    delimiter = ",";
                }
            });
            $("#task_IDs").val(tasks);
            //alert(orders);
        }

        // функция вызывается при смене значения дропдаун-листа
        function OnChange_Note(task_ID, ddl) {
            var taskStatus = ddl[ddl.selectedIndex].value

            $(ddl).parent().removeClass('taskStatus1 taskStatus2 taskStatus3 taskStatus4 taskStatus5');
            $(ddl).parent().addClass('taskStatus' + taskStatus);

            var JQUERY_ID = "#" + ddl.id; //taskStatus_
            
            //$(JQUERY_ID).parent().css("background-color", getBackGround1(ddl_value));
            //var text_otmetki = $(JQUERY_ID).parent().next().find("select option:selected").text();

            
            $.post('saveTaskStatus', {
                'task_ID': task_ID,
                'taskStatus': taskStatus
            },
            function (data) {

                var offset = $(JQUERY_ID).offset();
                $('.resultMessageFloat').css('top', offset.top + 21);
                $('.resultMessageFloat').css('left', offset.left + 10);

                $('.resultMessageFloat').html(data.Message);
                $('.resultMessageFloat').show('slow').delay(500).hide('slow');

                $(JQUERY_ID).next().html(data.Result);

            });
        }

        // MAIN
        $(function () {
            $.datepicker.setDefaults($.datepicker.regional[""]);
            $(".dateField").datepicker($.datepicker.regional["ru"]);

            // открыть DIV - "Приглашение пользователя"
            $('#tuneTableColumnsOpen').bind('click', function (e) {

                var offset = $(this).offset();
                $('#tuneTableColumns').css('top', offset.top + 28);
                $('#tuneTableColumns').css('left', offset.left - 100);
                $('#tuneTableColumns').toggle("blind");
            });

            // закрыть DIV - "настройки таблицы"
            $('#tuneTableColumns_close').bind('click', function () {
                $('#tuneTableColumns').hide("blind");
            });

            // выбор или снятие всех чекбоксов
            $("#checkAll").click(function () {
                if (!$("#checkAll").is(":checked"))
                    $(".checkbox").removeAttr("checked");
                else
                    $(".checkbox").attr("checked", "checked");

                updateCheckList();
            });

            // нажатие чекбокса
            $('.checkbox').change(function () {
                updateCheckList();
            });

//            // выполнить быструю оплату
//            $('#Submit_quickPay').bind('click', function (e) {
//                $.post('quickPay',
//            {
//                'task_IDs': $('#tasks').val()
//            },
//                function (data) {
//                    $('.resultMessage').html(data);
//                });
//            });


            // открыть DIV - "восстановить платежи"
            $('#openRestorePayments').bind('click', function (e) {

                var offset = $(this).offset();
                $('#restorePaymentsPopup_div').css('top', offset.top - 144);
                $('#restorePaymentsPopup_div').css('left', offset.left -186);
                $('#restorePaymentsPopup_div').show("blind");
            });

            // закрыть DIV - "восстановить платежи"
            $('#restorePaymentsPopup_close').bind('click', function () {
                $('#restorePaymentsPopup_div').hide("blind");
            });

        });
</script>
 
}

@{
    ViewBag.Title = "Задачи";
    long currentUser_ID = new UserService().getCurrentUser().ID;

    ProjectService projectService = new ProjectService();
    bool youCanAddTasks = projectService.getProjectsList(currentUser_ID).Where(p => p.owner_ID == currentUser_ID).Count() > 0;

    //int sumTotal = 0;
    //int sumInPeriod = 0;
    //int sumOutPeriod = 0;
    //int sumInTotal = 0;
    //int sumOutTotal = 0;

    //int sumPay = 0;
}
<span class="resultMessage">@Html.Raw(ViewData["resultMessage"] != null ? ("<span>" + ViewData["resultMessage"] + "</span>") : "")</span> 
<span class="resultMessageFloat">
@Html.Raw(ViewData["resMessage"] != null ? ViewData["resMessage"].ToString() : "")</span>
<h2>Задачи</h2>


<div style="float: left;">
@if (youCanAddTasks)
{
@Html.ActionLink("Создать задачу", "CreateTask", null, new
{
    @class = "actionLinkDashed",
    title = "Вы можете создавать задачи только для тех проектов, в которых являетесь администратором"
})
}
else
{
    <p>
        Вы можете создавать задачи только для тех проектов, в которых являетесь администратором.
        <br /> Для начала работы перейдите на страницу "Проекты" и добавьте свой проект!
    </p>
}
</div>


<div class="clear"></div>

<table class="itemsList">
@using (Html.BeginForm("tasks", "tm"))
{

<tr>
    <th>
        <input id="refreshTasksList" type="submit" value="Обновить" name="confirmButton" />
    </th>
    <th style=" vertical-align: bottom;">
        
        <input type="checkbox" value="true" name="checkAll" id="checkAll" />
    </th>
    <th style="width: 200px;">
        Наименование
    </th>
     
    <th style="@(!Model.tuneTableColumns_project ? "display: none;" : "")">
        Проект
        <br />
        @Html.DropDownList("tasks_projectID_filter", new SelectList(Model.projects, "Value", "Text", Model.projectID_filter), new { @class = "filterInputs" })
    </th>
    
   
    <th style="@(!Model.tuneTableColumns_roles ? "display: none;" : "")">
        <div class="userAdmin" title="Администратор">Администратор</div>
        @Html.DropDownList("tasks_ownerID_filter", new SelectList(Model.owners, "Value", "Text", Model.ownerID_filter), new { @class = "filterInputs" })
        
        <div  class="userCustomer" title="Заказчик" style="margin-top: 10px;">Заказчик</div>
        @Html.DropDownList("tasks_customerID_filter", new SelectList(Model.customers, "Value", "Text", Model.customerID_filter), new { @class = "filterInputs" })
        
        <div  class="userPerformer" title="Исполнитель" style="margin-top: 10px;">Исполнитель</div>
        
        @Html.DropDownList("tasks_performerID_filter", new SelectList(Model.performers, "Value", "Text", Model.performerID_filter), new { @class = "filterInputs" })
    </th>
    
   
    <th style="min-width: 120px; @(!Model.tuneTableColumns_status ? "display: none;" : "")">
        Статус
        <br />
       @for (int i = 1; i <= 5; i++)
       {
              <div class="itemsListFilter">
              <label>
              @Html.CheckBox("task_status" + i, Model.taskStatus_filter.Contains(i))
              @(((taskStatuses)i).ToString())
              </label><br />
              </div>
       } 
          
    </th>
    
    
    <th style="min-width: 100px; @(!Model.tuneTableColumns_priority ? "display: none;" : "")">
        Приоритет
         <br />
       @for (int i = 1; i <= 4; i++)
       {
              <div class="itemsListFilter">
              <label>
              @Html.CheckBox("task_priority" + i, Model.taskPriority_filter.Contains(i))
              @(((priorities)i).ToString())
              </label><br />
              </div>
       } 
    </th>
    
    
     <th style="@(!Model.tuneTableColumns_dates ? "display: none; width: 160px;" : "width: 160px;")">
        <span class="fromto">C:</span>@Html.TextBox("planStartFilterStringFrom", tools.getStringFromNullableDateTime(Model.planStartFilterFrom), new { @class = "dateField", Title = "Фильтр по дате запланированного старта" })
        <br /><span class="fromto">По:</span>@Html.TextBox("planStartFilterStringTo", tools.getStringFromNullableDateTime(Model.planStartFilterTo), new { @class = "dateField", Title = "Фильтр по дате запланированного финиша" })
        
        <br /><span class="datePrefixPlan">Старт план</span>
        <a title="Если в проектах где вы администратор есть платежи по задачам, входящие в период, то они также будут добавлены в список и обозначены значком монеток в колонке 'Даты'" class="tooltip">
                    <img alt="?" src="@Url.Content("~/Content/images/question.gif")" /></a>
        <br />
        <span class="datePrefixFact">Старт факт</span>
        
        
    </th>
    <th style="@(!Model.tuneTableColumns_dates ? "display: none; width: 118px;" : "width: 118px;")">
        
        <span class="datePrefixPlan">Финиш план</span>
        <a title="Если в проектах где вы администратор есть платежи по задачам, входящие в период, то они также будут добавлены в список и обозначены значком монеток в колонке 'Даты'" class="tooltip">
                    <img alt="?" src="@Url.Content("~/Content/images/question.gif")" /></a>
        <br />
        <span class="datePrefixFact">Финиш факт</span>
    </th>
    
   
    <th style="min-width: 80px; @(!Model.tuneTableColumns_sums ? "display: none;" : "")">
        Сумма <a title="'К оплате' - это задачи со статусом 'выполненные' и для которых выполняется условие: 'сумма' больше чем 'сумма всех входящих платежей'" class="tooltip">
                    <img alt="?" src="@Url.Content("~/Content/images/question.gif")" /></a>
        <br />
        <label style="color: Red;">
        @Html.CheckBox("isToPay_filter", Model.isToPay_filter) к оплате</label>
         
    </th>
    <th style="min-width: 80px;@(!Model.tuneTableColumns_sums ? "display: none;" : "")">
        + все
        <br />- все
    </th>
    <th style="min-width: 80px;@(!Model.tuneTableColumns_sums ? "display: none;" : "")">
        + период
        <br />- период
    </th>
    
    <th class="anchorColumn">
        <div class="anchored">
            <span id="tuneTableColumnsOpen"  class="actionLinkDashed">Настроить отображение колонок</span>
        </div>
    </th>             
</tr>
}

@foreach (var _item in Model.tasks)
{
    bool rightsEdit = _item.rightsEditDelete;
    string rowClass = rightsEdit ? "" : "rowPreview";

    //if (_item.taskStatus != taskStatuses.Периодическая.GetHashCode())
    //{
    //    sumTotal += (_item.sumPlanned ?? 0);
    //    sumInPeriod += _item.sumInPeriod;
    //    sumOutPeriod += _item.sumOutPeriod;

    //    sumInTotal += _item.sumInTotal;
    //    sumOutTotal += _item.sumOutTotal;
        
    //    if (_item.taskStatus == taskStatuses.Выполнена.GetHashCode() && (_item.sumPlanned ?? 0) > _item.sumInTotal)
    //    { sumPay += ((_item.sumPlanned ?? 0) - _item.sumInTotal); }
    //}
    
    <tr>
        <td style=" text-align: center;">
                
                @if (rightsEdit)
                {
                    @Html.ActionLink(" ", "taskDetails", new { id = _item.ID }, new { @class = "edit", title = "Редактировать" })
                    @:&nbsp; @Html.ActionLink(" ", "deleteTask", new { id = _item.ID }, new { @class = "delete", title = "Удалить", onclick = "return confirm('действительно хотите удалить задачу?');" })
                }
                else
                {
                    @Html.ActionLink(" ", "taskDetails", new { id = _item.ID }, new { @class = "view", title = "Просмотр" })
                }
        </td>
        <td>
            @Html.CheckBox(_item.ID.ToString(), new { @class = "checkbox" })
            [@_item.ID]
        </td>
        <td>
            @_item.taskName

         
        </td>
         
        <td style="@(!Model.tuneTableColumns_project ? "display: none;" : "")">
            @_item.project.projectName
        </td>
        
         <td style="@(!Model.tuneTableColumns_roles ? "display: none;" : "")">
            <div class="userAdmin" title="Администратор">
            @{ SelectListItem selectUser = Model.userNames.FirstOrDefault(p => p.Value == _item.project.owner_ID.ToString());
               
                    if (selectUser != null)
                    {@selectUser.Text}
                    else
                    {<span style="color: Red;">пользователь удалён</span>}
              
                }
            
            </div>
        
           @if (_item.project.customer_ID != null)
           {
               selectUser = Model.userNames.FirstOrDefault(p => p.Value == _item.project.customer_ID.ToString());
               <div  class="userCustomer" title="Заказчик"> 
                    @if (selectUser != null)
                    {@selectUser.Text}
                    else
                    {<span style="color: Red;">пользователь удалён</span>}
               </div>
           }
          
        
        @if (_item.performer_ID != null)
        {
            selectUser = Model.userNames.FirstOrDefault(p => p.Value == _item.performer_ID.ToString());
               <div  class="userPerformer" title="Исполнитель"> 
                    @if (selectUser != null)
                    {@selectUser.Text}
                    else
                    {<span style="color: Red;">пользователь удалён</span>}
               </div>
        }
        </td>
        
        @{
        string taskStatus = ""; int taskStatus_ID = 1;
        if (Enum.IsDefined(typeof(taskStatuses), _item.taskStatus))
        {
            taskStatus = ((taskStatuses)_item.taskStatus).ToString();
            taskStatus_ID = ((taskStatuses)_item.taskStatus).GetHashCode();
        }

        string taskStatusClass = "taskStatus" + _item.taskStatus;

        List<SelectListItem> taskStatusesList = tools.getEnumSelectList<taskStatuses>().ToList();
        string OnChangeStatus = "OnChange_Note(" + _item.ID + ", this)";
        }
        
        <td class="@taskStatusClass"  style="@(!Model.tuneTableColumns_status ? "display: none;" : "")">
        
           @* @taskStatus*@

            @Html.DropDownList("taskStatus_" + _item.ID, new SelectList(taskStatusesList, "Value", "Text", taskStatus_ID),
                new { onChange = OnChangeStatus })
        </td>
        
        @{
        string priority = "";
        if (Enum.IsDefined(typeof(taskStatuses), _item.priority))
        {
            priority = ((priorities)_item.priority).ToString();
        }

        string priorityClass = "priority" + _item.priority;
          }
         
        <td class="@priorityClass" style="@(!Model.tuneTableColumns_priority ? "display: none;" : "")">
            @priority
        </td>
            <td style="@(!Model.tuneTableColumns_dates ? "display: none;" : "")">
            @if (_item.taskStatus == taskStatuses.Периодическая.GetHashCode())
            {
                if (_item.periodicalEveryMonthDay != null)
                {
                    @:каждый день месяца:<strong> @_item.periodicalEveryMonthDay</strong>
                }
                else if (_item.periodicalEveryWeekDay != null)
                {
                    @:каждый: <strong> @((weekDays)_item.periodicalEveryWeekDay)</strong>
                }
                if (_item.periodicalIsOn)
                {<span style="color: Green;">(вкл)</span>}
                else
                {<span style="color:Blue;">(выкл)</span>}
            }
            else
            { @Html.Raw(_item.planStart != null ? @"<span class=""datePrefixPlan"">План&nbsp;</span>" + ((DateTime)_item.planStart).ToShortDateString() : "") 
                if (_item.includeByPayment)
                {
                        <a title="Эта задача включена в список так как есть платежи в этом периоде" class="tooltip">
                        <img src="@Url.Content("~/Content/images/money_gold16.png")" alt="$"  /></a>
                }
                if (_item.taskStatus != taskStatuses.Новая.GetHashCode() && _item.taskStatus != taskStatuses.Периодическая.GetHashCode())
                {
                        <br />
                        @Html.Raw(_item.factStart != null ? @"<span class=""datePrefixFact"">Факт&nbsp;</span>" + ((DateTime)_item.factStart).ToShortDateString() : "")
                }
            }
        </td>
        <td style="@(!Model.tuneTableColumns_dates ? "display: none;" : "")">
            @if (_item.taskStatus == taskStatuses.Периодическая.GetHashCode())
            {

            }
            else
            {
                @Html.Raw(_item.planFinish != null ? @"<span class=""datePrefixPlan"">План&nbsp;</span>" + ((DateTime)_item.planFinish).ToShortDateString() : "")  
                if (_item.taskStatus == taskStatuses.Выполнена.GetHashCode())
                {
                    <br />
                    @Html.Raw(_item.factFinish != null ? @"<span class=""datePrefixFact"">Факт&nbsp;</span>" + ((DateTime)_item.factFinish).ToShortDateString() : "")
                }
            }
        </td>
         
        @{
            string sumColorStyle = "";
            string title = "";
            if (_item.taskStatus == taskStatuses.Выполнена.GetHashCode() && (_item.sumPlanned ?? 0) > _item.sumInTotal)
            { sumColorStyle = "color: Red;"; title = "К оплате"; }
        }
        <td title="@title" style="text-align: right; @(!Model.tuneTableColumns_sums ? "display: none;" : "") @sumColorStyle">
            @if (_item.taskStatus != taskStatuses.Периодическая.GetHashCode() && rightsEdit)
            {@_item.sumPlanned}
        </td>
        <td style="text-align: right; @(!Model.tuneTableColumns_sums ? "display: none;" : "")">
        @if (_item.taskStatus != taskStatuses.Периодическая.GetHashCode() && rightsEdit)
        { <text>   + @_item.sumInTotal
            <br />
            - @_item.sumOutTotal
          </text>   
        }
        </td>
        <td style="text-align: right; @(!Model.tuneTableColumns_sums ? "display: none;" : "")">
        @if (_item.taskStatus != taskStatuses.Периодическая.GetHashCode() && rightsEdit)
        { <text>
           + @_item.sumInPeriod
            <br />
           - @_item.sumOutPeriod
           </text>   
        }
        </td>
        
        <td class="anchorColumn"></td>   
    </tr>   
    
} 
@{
    int colSpan = 7;
    if (!Model.tuneTableColumns_project)
    { colSpan--; }

    if (!Model.tuneTableColumns_roles)
    { colSpan--; }

    if (!Model.tuneTableColumns_status)
    { colSpan--; }

    if (!Model.tuneTableColumns_priority)
    { colSpan--; }

    if (!Model.tuneTableColumns_dates)
    { colSpan = colSpan - 2; }

    if (!Model.tuneTableColumns_sums)
    { colSpan = colSpan - 3; }
     
}
<tr class="tableItog">
        <td colspan="2">
            <a title="'Оплатить задачи, выделенные чекбоксом. Фиксируется входящий платеж на сумму равную разнице суммы задачи и суммы всех совершенных ранее входящих платежей " class="tooltip">
                    <img alt="?" src="@Url.Content("~/Content/images/question.gif")" /></a>
            @using (Html.BeginForm("quickPay", "tm"))
            {
                @Html.Hidden("task_IDs", "", new { id = "task_IDs" })
                <input id="Submit_quickPay" type="submit" value="Быстрая оплата" style="width: 120px;" />
            }
        </td>
        <td colspan="@colSpan">
        <a title="Вы не хотите хранить данные о суммах платежей на сайте? Данная операция удалит все суммы ваших платежей с сайта и сохранит их на ваш компьютер. Когда вам потребуется снова поработать с платежами - восстановите платежи из файла" class="tooltip">
                    <img alt="?" src="@Url.Content("~/Content/images/question.gif")" />
        </a>
        @Html.ActionLink("Переместить платежи в файл", "backupPayments", null, new { @class = "actionLinkDashed" })
        &nbsp;&nbsp;&nbsp;&nbsp;
         
         <span id="openRestorePayments" class="actionLinkDashed">Восстановить платежи</span>
         @*@Html.ActionLink("Восстановить платежи", "restorePayments")*@
         

        
            
        </td>
        <td style="@(!Model.tuneTableColumns_sums ? "display: none;" : "")">
            @Model.sumTotal
            @if (Model.sumPay != 0)
            { <br /><span style="font-size: 11px; color: Red; font-weight: normal;">к оплате: @Model.sumPay</span> }
        </td>
        <td style="@(!Model.tuneTableColumns_sums ? "display: none;" : "")">
            + @Model.sumInTotal
            <br />- @Model.sumOutTotal
            @if ((Model.sumInTotal - Model.sumOutTotal) != 0)
            { <br /><span style="font-size: 11px; color: Gray; font-weight: normal;">итог: @(Model.sumInTotal - Model.sumOutTotal)</span> }
        </td>
        <td style="@(!Model.tuneTableColumns_sums ? "display: none;" : "")">
            + @Model.sumInPeriod
            <br />- @Model.sumOutPeriod
            @if ((Model.sumInPeriod - Model.sumOutPeriod) != 0)
            { <br /><span style="font-size: 11px; color: Gray; font-weight: normal;">итог: @(Model.sumInPeriod - Model.sumOutPeriod)</span>}
        </td>
</tr> 
</table>
@*</div>*@
<div id="tuneTableColumns">
<div style="float: right;">
                <img src="@Url.Content("~/Content/images/close2.gif")" id="tuneTableColumns_close" alt="закрыть" /></div>
    @using (Html.BeginForm("tuneTableColumns", "tm"))
    {
   <label>
       @Html.CheckBoxFor(model => model.tuneTableColumns_project)
       Проект
   </label><br />
   <label>
      @Html.CheckBoxFor(model => model.tuneTableColumns_roles)
       Роли
   </label><br />
   <label>
       @Html.CheckBoxFor(model => model.tuneTableColumns_status)
       Статус
   </label><br />
    <label>
       @Html.CheckBoxFor(model => model.tuneTableColumns_priority)
       Приоритет
   </label><br />
   <label>
       @Html.CheckBoxFor(model => model.tuneTableColumns_dates)
       Даты (план, финиш)
   </label><br />
   <label>
       @Html.CheckBoxFor(model => model.tuneTableColumns_sums)
       Суммы (всего, приходы, расходы)
   </label><br /><br />
      <input id="Submit1" type="submit" value="Сохранить" />
    } 
</div>

@Html.Partial("popups/restorePayments")